package com.woniuxy.jdkproxy;

import com.woniuxy.aspect.MyAspect;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class JdkProxyFactory {
    //targetClass被代理类
    public static  Object getProxyObject(final Object targetClass){
        //匿名内部类
        //??????
        return Proxy.newProxyInstance(targetClass.getClass().getClassLoader(), targetClass.getClass().getInterfaces(),
//                new InvocationHandler() {
//                    //??????
//                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//                        //前置增强???
//                        MyAspect myAspect=new MyAspect();
//                        myAspect.beforeLog();
//                        //被代理类方法???
//                        Object invoke=method.invoke(targetClass,args);
//                        myAspect.afterLog();
//                        return invoke;
//                    }
                //lamdba表达式写法
                (proxy, method, args) -> {
                    //前置增强
                    MyAspect myAspect=new MyAspect();
                    myAspect.beforeLog();
                    //被代理类方法???
                    Object invoke=method.invoke(targetClass,args);
                    myAspect.afterLog();
                    return invoke;
                });
    }
}
